/**
 * 
 */
package structure;

/**
 * Datenstruktur fuer ein Byte. Ein Byte wird als Array aus acht Booleanwerten abgebildet.
 * @author Dorothee Kern und Patrick Lehmann
 * 
 */
public class Byte {

    private boolean[] bits = new boolean[8];

    /**
     * Konstruktor initialisiert das Array mit False.
     */
    public Byte() {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = false;
        }
    }

    /**
     * Konstruktor mit Uebergabeparameter.
     * @param value Bytewert
     */
    public Byte(int value) {
        setByte(value);
    }

    public boolean[] getByteAsArray() {
        return bits;

    }

    /**
     * Liefert den Wert als int zurueck.
     * @return Dezimaldarstellung von Byte
     */
    public int getByteAsInt() {
        int value = 0;

        for (int i = 0; i < bits.length; i++) {
            if (bits[i] == true) {
                value += Math.pow(2, i);
            }
        }
        return value;
    }

    public boolean getBit(int position) {

        return bits[position];
    }

    /**
     * Umwandlung des Int-Wertes in binaere Darstellung.
     * MSB an der Stelle 7 des Array.
     * @param value Bytewert
     */
    public void setByte(int value) {

        if (value != 0) {
            int[] temp = new int[8]; // erzeugen von Hilfsarray
            for (int i = 0; i < temp.length; i++) {
                temp[i] = 0;
            }

            //umrechnen des Dezimalwertes in Binaerwert und speichern in Hilfsarray
            int i = 0;
            while (value != 0) {
                temp[i] = value % 2;
                value = value / 2;
                i++;
            }

            //wandeln der Intwerte in Boolwerte und f�llen des Byte-Arrays mit MSB an Stelle 7
            int k = 0;
            for (int j = 0; j < temp.length; j++) {
                if (temp[j] == 0) {
                    bits[k] = false;
                } else {
                    bits[k] = true;
                }
                k++;
            }
        } else { //Wenn value == 0
            for (int i = 0; i < bits.length; i++) {
                bits[i] = false;
            }
        }
    }

    public void setByte(boolean[] value) {
        bits = value;
    }

    public void setBit(int position, boolean value) {
        bits[position] = value;
    }
}
